/**
 * 
 */
package cn.biplam.front.template.control.rfFlowTable;

import cn.biplam.common.client.OperatorResult;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.Result;
import cn.biplam.common.wrapper.UserInfo;
import cn.biplam.common.wrapper.treeFlat.flat.callback.CompareCallback;
import cn.biplam.front.callback.CallBack;
import cn.biplam.front.template.control.rfFlowTable.callback.action.ActionCallback;
import cn.biplam.front.template.control.rfFlowTable.callback.content.ContentCallback;

/**
 * 可反射调用的Flowtable(文字列仅支持一个页面对象,按钮列支持多个页面对象)<BR>
 * 单元格标题通过标题文字Callback获取、单元格动作通过ActionCallback获取<BR>
 * 反射调用时,在本类上面再封装一个调用逻辑层,从数据库中获取创建信息,调用相应的创建方法<BR>
 * <UL>
 * 使用方法:
 * <li> table.putField();  设置表格列
 * <li>  设置分页信息（可选）<BR>
 * 		table.setPageProperty('分页跳转动作ID','分页记录ID','分页跳转目标ID'); <BR>
 *      putPageAddParam(参数名,参数值)方法 设置放入分页所需附加参数<BR>
 * <li> table.setRemoveRepeat(列名称列表)   设置剔除重复数据列
 * <li> table.get();	 获取表格
 * </UL>
 * @author 	WangSong 2009-11-5 下午02:22:10
 * @version 1.0
 */
public class RfFlowTable extends RfTable{

	/**
	 * 构造方法
	 * @param mUser			用户信息类
	 * @param sHomeUrl		主页地址
	 * @param tablePageID	表格页面对象ID
	 * @param mainKey       主键字段名称
	 * @param result		操作结果集
	 * @throws ErrorMessage
	 */
	public RfFlowTable(String sHomeUrl,UserInfo mUser,
			String tablePageID,
			OperatorResult result) throws ErrorMessage{
		super(sHomeUrl, mUser, tablePageID, result);
	}
	
	/**
	 * 构造方法
	 * @param mUser			用户信息类
	 * @param sHomeUrl		主页地址
	 * @param tablePageID	表格页面对象ID
	 * @param mainKey       主键字段名称
	 * @param result		可迭代访问的数据集
	 * @throws ErrorMessage
	 */
	public RfFlowTable(String sHomeUrl,UserInfo mUser,
			String tablePageID,
			Result result) throws ErrorMessage{
		this(sHomeUrl,mUser,tablePageID,new OperatorResult(result));
	}

	/**
	 *  设置当前表格的记录ID
	 * @param recordId 记录ID
	 */
	public void setResordId(String recordId){
		this.table.setResordId(recordId);
	}
	
//	/*****************************
//	* 
//	* 	放入文字字段的方法
//	* 
//	* ***************************/
	/**
	 * 放入一个列字段,由Callback创建标题文字,判断是否绑定动作,由Callback指定动作
	 * @param fieldName			列字段名		
	 * @param fieldCaption		列标题文字
	 * @param contentCallback	列内容回调类
	 * @param actCallback		动作回调类
	 * @throws ErrorMessage
	 */
	public void putField(String fieldName,String fieldCaption,CallBack contentCallback,
			ActionCallback actCallback,CompareCallback compareCallback) throws ErrorMessage{
		this.property.putCol(fieldName, fieldCaption, contentCallback, actCallback, compareCallback);
	}

//	/*****************************
//	* 
//	* 	放入操作按钮的方法
//	* 
//	* ***************************/

	/**
	 * 放入一个按钮,指定标题文字,由Callback指定动作
	 * @param fieldCaption		按钮标题文字
	 * @param actCallback		按钮动作回调类
	 * @throws ErrorMessage
	 */
	public void putButton(String buttonCaption,
			ActionCallback actCallback) throws ErrorMessage{
		this.property.putButton(buttonCaption, actCallback);
	}

	/**
	 * 放入一个按钮,由Callback创建标题文字,判断是否绑定动作,由Callback指定动作
	 * @param buttonCaption		按钮标题文字
	 * @param actCallback		动作回调类
	 * @throws ErrorMessage
	 */
	public void putButton(String buttonCaption,
			ActionCallback actCallback,CompareCallback compareCallback) throws ErrorMessage{
		this.property.putButton(buttonCaption, actCallback, compareCallback);
	}
	
	/**
	 * 放入一个按钮,由Callback创建标题文字,判断是否绑定动作,由Callback指定动作
	 * @param buttonCaption		按钮标题文字
	 * @param actCallback		动作回调类
	 * @throws ErrorMessage
	 */
	public void putButton(String buttonCaption,
			ActionCallback actCallback,
			CompareCallback compareCallback,
			ContentCallback contentCallback) throws ErrorMessage{
		this.property.putButton(buttonCaption, actCallback, compareCallback,contentCallback);
	}

	/**
	 *  设置需要剔除重复数据列
	 * @param sColFieldName 列字段名
	 * @throws ErrorMessage 
	 */
	public void setRemoveRepeat(String sColFieldName) throws ErrorMessage{
		this.table.setRemoveRepeatCol(sColFieldName);
	}
	
	/**
	 *  设置表格行刷新动作
	 * @param sRefreshAction 行刷新动作
	 */
	public void setColRefreshAction(String sRefreshAction){
		this.table.setColRefreshAction(sRefreshAction);
	}
	
	/**
	 * 设置表格分页参数(要刷新的目标区域不是当前表格)<BR>
	 * <B>表格绑定的数据集必须也是分页模式(由Operator.getPage方法获取)</B>
	 * @param pageActID  分页跳转动作ID
	 * @param recordId   分页页面记录ID
	 * @param targID     要刷新的目标区域ID
	 */
	public void setPageProperty(String pageActID, String recordId, String targID){
		this.table.setPageProperty(pageActID, recordId, targID);
	}
	
	/**
	 *  放入分页提交所需附加参数
	 * @param paramName   参数名称
	 * @param paramValue  参数值
	 * @throws ErrorMessage 
	 */
	public void putPageAddParam(String paramName, String paramValue) throws ErrorMessage{
		this.table.putPageAddParam(paramName, paramValue);
	}
}
